import argparse
import os

# --- 模拟 Cargo 包信息 ---
# 尝试从环境变量获取，或者使用默认值
AUTHOR = os.environ.get("CARGO_PKG_AUTHORS", "未知作者 <author@example.com>")
REPOSITORY = os.environ.get("CARGO_PKG_REPOSITORY", "https://example.com/unknown/repository")
VERSION = os.environ.get("CARGO_PKG_VERSION", "0.1.2-dev-py") # 示例版本号

# --- 单例配置 ---
_config_instance = None # 用于缓存解析后的参数

def get_config():
    """
    获取命令行配置。
    首次调用时解析参数，后续调用返回缓存结果，确保只解析一次。
    """
    global _config_instance
    if _config_instance is None:
        _config_instance = _parse_args()
    return _config_instance

def _after_help():
    """生成显示在帮助信息末尾的作者和仓库信息。"""
    return f"作者    : {AUTHOR}\n仓库: {REPOSITORY}"

def _parse_args():
    """使用 argparse 解析命令行参数。"""
    parser = argparse.ArgumentParser(
        description="解码酷狗 KGM/VPR 加密文件。",
        epilog=_after_help(), # 在帮助信息末尾显示附加信息
        formatter_class=argparse.RawDescriptionHelpFormatter # 保持 epilog 的换行格式
    )
    # --- 定义命令行参数 ---
    parser.add_argument(
        "target", # 位置参数：目标文件或文件夹
        help="需要处理的目标文件或文件夹路径"
    )
    parser.add_argument(
        "-r", "--recursive", # 可选参数：是否递归处理
        action="store_true", # 指定该参数时，其值为 True
        help="递归处理文件夹及其子文件夹中的文件"
    )
    parser.add_argument(
        "-k", "--keep-file", # 可选参数：是否保留原文件
        action="store_true",
        help="解码后保留原始加密文件"
    )
    parser.add_argument(
        '--version', # 可选参数：显示版本号
        action='version', # 特殊 action，用于显示版本信息
        version=f'%(prog)s {VERSION}' # 版本信息的格式
    )
    # Rust 代码中注释掉的 --stdout 参数，这里也保持注释
    # parser.add_argument(
    #     "-c", "--stdout",
    #     action="store_true",
    #     help="输出到标准输出流，并且不删除输入文件"
    # )
    return parser.parse_args() # 解析参数并返回结果对象

# --- 模块独立运行时执行的代码 ---
if __name__ == '__main__':
    # 直接运行 config.py 时的示例用法
    cfg = get_config()
    print(f"目标: {cfg.target}")
    print(f"递归: {cfg.recursive}")
    print(f"保留文件: {cfg.keep_file}") 